'''读取设置文件的简单类.
设置文件有效行有2种可能:
[分类名],分类
项目=值,为避免编码问题,建议都用英文字母数字下划线.
项目与值的头尾空格将被忽视.
有分类的(注意分类只能一层),在读取的字典中用分类名作为key,新建字典,
后面的项目与值就是字典的key与value
如一开始没有分类名,则项目与值直接作为key与value

#开头的行为注释,无效.前面可以有任意的空格.
若无法通过=分成两份,视为无效,可以当注释但不推荐
通过设置文件名进行初始化.
通过getConfig方法获取设置形成的字典,若设置有重名项,会覆盖!

config文件形如:
# top level:
name = setycyas
num = 123456

# sections:
[bbs]
gal = kf,ck
[game]
slg = fe,lg
'''

class ConfigReader:

  ## 需要指定读取文件的编码,默认utf8
  def __init__(self, filePath, encoding = 'utf8'):
    self._config = {}
    curDict = self._config # 当前字典,在有分类后更改当前字典
    with open(filePath,'rb') as f:
      lines = f.read().decode(encoding).split('\n')
      for line in lines:
        line = line.strip()
        # 跳过注释
        if line.startswith('#'):
          continue
        # 得到分类时:
        if line.startswith('[') and line.endswith(']'):
          newDict = line[1:-1]
          self._config[newDict] = {}
          curDict = self._config[newDict]
        lineSplit = line.split('=')
        if len(lineSplit)!=2:
          continue
        key, value = lineSplit
        key = key.strip()
        value = value.strip()
        curDict[key] = value
    return
    
  # 打印得到的字典
  def printConfig(self):
    for key in self._config:
      print("%s:%s" % (key, self._config[key]))
    return
    
  # 获取得到的字典
  def getConfig(self):
    return self._config


if __name__ == '__main__':
  fp = r'D:\software\python351\MyPython\myApp\myClass\ConfigReader\1.config'
  cr = ConfigReader(fp)
  cr.printConfig()